#!/usr/bin/env python
# coding=utf-8
"""
@Author  : youjia - 卞志伟
@file    : invest_week_report.py
@contact : bianzhiwei@iyoujia.com
@time    : 2019-06-06 11:07 
@Desc    : 投资人周报
@Software: PyCharm
"""
import os
import sys

# 当前文件的路径
pwd, filename = os.path.split(os.path.abspath(__file__))
# 当前文件的父路径
father_path = os.path.abspath(os.path.dirname(pwd) + os.path.sep + ".")
# 当前文件的前两级目录
grader_father = os.path.abspath(os.path.dirname(pwd) + os.path.sep + "..")
sys.path.append(pwd)
sys.path.append(father_path)
sys.path.append(grader_father)
from report_system.utils import date_util
from report_system.utils.log_util import log
from report_system.utils import excel_util
from report_system.utils import mail_util
from report_system.utils import mailbox_util
from report_system.report_specify.day_report_specify import *
from report_system.utils.development_util import debug

if debug:
    receivers = 'dt@iyoujia.com'
    invest_mails = mailbox_util.mails_invest
else:
    receivers = 'dt@iyoujia.com;machao@iyoujia.com'
    invest_mails = mailbox_util.mails_invest


def detail(dt=None):
    dt = dt or date_util.curdate()
    # 获取截止日的数据  本月一号至截止日
    house_month_df = house_month(dt)
    house_month_df = df_util.df_set_index(house_month_df, INDEX_HOUSE)
    house_month_df = df_util.df_set_first_title(house_month_df, TITLE_MONTH)
    log.info(house_month_df.columns)
    house_month_df = house_month_df.drop(['下单数（含未支付）', '下单数（已支付）', 'GMV（已支付）',
                                          '下单间夜（含未支付）', '下单间夜（已支付）',
                                          '入住间夜（含未支付）未取消', '入住间夜（含未支付）已取消',
                                          '入住间夜（已支付）未取消', '入住间夜（已支付）已取消'],
                                         level=1, axis=1)
    st = date_util.cur_month_first(dt=dt)
    sev_st = date_util.date_sub(dt, days=6)
    house_month_df['月计算周期'] = str(st) + '至' + str(dt)
    # 获取前七天的数据
    house_ago_seven_df = house_ago_seven(dt)
    house_ago_seven_df = df_util.df_set_index(house_ago_seven_df, INDEX_HOUSE)
    house_ago_seven_df = df_util.df_set_first_title(house_ago_seven_df, TITLE_AGO_SEVEN)
    log.info(house_ago_seven_df.columns)
    house_ago_seven_df = house_ago_seven_df.drop(['下单数（含未支付）', '下单数（已支付）', 'GMV（已支付）',
                                                  '下单间夜（含未支付）', '下单间夜（已支付）',
                                                  '入住间夜（含未支付）未取消', '入住间夜（含未支付）已取消',
                                                  '入住间夜（已支付）未取消', '入住间夜（已支付）已取消'], level=1, axis=1)
    house_ago_seven_df['前七天计算周期'] = str(sev_st) + '至' + str(dt)

    df = pd.merge(house_ago_seven_df, house_month_df, how='left', left_index=True, right_index=True)
    df = df.reset_index()
    df = df[~df['投资人'].isnull()]
    df = df_util.df_set_index(df, '房屋ID')
    house_basics_df = house_basics()

    df = pd.merge(house_basics_df, df, how='right', left_index=True, right_index=True)
    df = df.reset_index()
    return df


def summary(dt=None):
    dt = dt or date_util.curdate()
    st = date_util.cur_month_first(dt=dt)
    sev_st = date_util.date_sub(dt, days=6)
    # 获取截止日的数据
    invest_month_df = invest_month(dt)
    invest_month_df['月计算周期'] = str(st) + '至' + str(dt)
    # 获取前七天的数据
    invest_ago_seven_df = invest_ago_seven(dt)
    invest_ago_seven_df['前七天计算周期'] = str(sev_st) + '至' + str(dt)
    df = pd.merge(invest_ago_seven_df, invest_month_df, how='left', left_index=True, right_index=True)
    df = df.reset_index()

    return df


def process(dt=None):
    dt = dt or date_util.curdate()
    detail_df = detail(dt)
    log.info('投资人日报 明细数据 处理完成！')
    summary_df = summary(dt)
    log.info('投资人日报 汇总数据 处理完成！')
    # for investor_mail, investor_names in mailbox_util.mails_invest.items():
    base_file_path = excel_util.pd_to_excel({'汇总': summary_df, '明细': detail_df}, '投资人经营数据周报',
                                            engine='xlsxwriter', merge_cells=True)

    mail_util.send_files_mail(base_file_path, '投资人经营数据周报', '投资人经营数据周报', receiver='bianzhiwei@iyoujia.com;machao@iyoujia.com',
                              invest=True)

    for investor_mail, investor_names in invest_mails.items():
        log.info('正在处理 发送 投资人周报 {investor_names}'.format(investor_names=investor_names))
        all_detail_df = [detail_df[detail_df['投资人'] == investor_name].copy() for investor_name in investor_names]
        temp_detail_df = pd.concat(all_detail_df)

        all_summary_df = [summary_df[summary_df['投资人'] == investor_name].copy() for investor_name in investor_names]
        temp_summary_df = pd.concat(all_summary_df)

        investor_name = investor_names[0]
        temp_file_path = excel_util.pd_to_excel({'汇总': temp_summary_df, '明细': temp_detail_df}, investor_name,
                                                engine='xlsxwriter',
                                                merge_cells=True)
        text = """    尊敬的 {investor_name} 先生/女士:

            附件为本周房源经营数据!
            请查收！
            以下为字段解释：
    字段	                        解释
在线房屋数量    :     已经上线，且当前没有下线的房屋数
在线间夜        :     一个房屋在线了多少天，就有多少个在线间夜
不可租间夜      :     房源因为政策原因（当地开政策性会议）、房屋设施损坏等原因，会造成当天或连续几天房屋不可租
可租间夜        :     在线间夜-不可租间夜。
可租率          :     可租间夜/在线间夜
实际入住间夜     :     统计周期内实际入住的间夜
出租率          :     入住间夜/可租间夜
退款率          :     退款人数/总预订数
入住收益        :     实际入住间夜产生的收入
违约赔付收益     :     房客退款，扣留首晚房费的收益
GMV            :     违约赔付收益+入住收益
REVPAR         :     GMV/可租间夜
平均售卖日价     :     GMV/实际入住间夜

        """.format(investor_name=investor_name)
        # colors = {"前七天数据": '#FFEC8B', "本月一号至昨日数据": '#FFE4B5'}
        # colors_dict = {"汇总": colors,
        #                "明细": colors,
        #                }
        mail_util.send_files_mail(temp_file_path, text, '投资人经营数据周报', receiver=investor_mail,
                                  invest=True)


def run(dt=None):
    dt = dt or date_util.curdate()
    try:
        process(dt)
        log.info('投资人日报 发送成功！')
    except Exception as e:
        mail_util.error_mail("城市日报", e.__str__())
        log.error('投资人日报 处理出现问题！')
        log.exception(e)


if __name__ == '__main__':
    process()
